package com.ly.cloud.aop;

import com.ly.common.core.bean.R;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

/**
 * @author luoyun
 * @Date: 2025/6/10 1:11
 * @Note:
 */

@Aspect
@Component
public class FeignFallbackAspect {

    @Around("execution(* com.ly.cloud.api.*.*(..))")  // 拦截所有 Feign 接口方法
    public Object fallback(ProceedingJoinPoint joinPoint) throws Throwable {
        try {
            return joinPoint.proceed();  // 正常调用
        } catch (Exception e) {
            // 全局降级逻辑（可根据异常类型返回不同结果）
            System.err.println("Feign 调用失败，执行降级: " + e.getMessage());
            // 示例：返回默认值（需根据方法返回类型动态处理）
            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
            if (methodSignature.getReturnType() == R.class) {
                return R.ok("暂时无法获取接口数据1111");
            }
            throw e;  // 无法降级时抛出异常
        }
    }
}